/**
 * 自定义路由
 */
import { $activityDetail } from '@/http/apiManager.js'
import appConfig from '@/config/appConfig.js'
import storageManage from '@/util/storageManage.js'
import dayjs from 'dayjs'
import $infoBox from '@/common/fun.js'

/** 地址参数解析 */
function parseUrlParams(url) {
	var params = {};
	var paramsString = url.split('?')[1];

	if (paramsString) {
		var paramsArray = paramsString.split('&');

		paramsArray.forEach(function(param) {
			var keyValue = param.split('=');
			var key = keyValue[0];
			var value = keyValue[1];
			params[key] = value;
		});
	}
	return params;
}

/**
 * 拦截处理数据
 */
function invoke(routerData, method) { // url中含有pagesActivity即是跳转活动页面
	var params = routerData.url
	const { activityId, from, date } = parseUrlParams(params)
	uni.showLoading({
		title: '加载中'
	})
	$activityDetail({ activityId }).then(({ bizData }) => {
		uni.hideLoading()
		// 详情中返回 小程序跳转路径	periodType 同一用户周期性次数限制参与(0不限制，1限每日，2限每周，3限每月)
		const { litePath, authConfig, payAuthId, ifCode, isCommSubject, litePath2, entryway, activityImg2, periodType, activityTemplateNo, officialAppId, officialAuthUrl } = bizData
		params = params + '&activityTemplateNo=' + activityTemplateNo
		// 流量入口同时配置了小程序首页和公众号渠道   from0从首页跳转进来的活动 from1从公众号渠道跳转过来的但是是别人分享的信息  在这些条件下要跳转活动副页面 如果活动副页面未配置 则跳转具体的活动页面
		if (entryway?.includes('0') && entryway?.includes('2') && (from == '0' || from == '1') && litePath2 && activityImg2) { // 跳转易拉宝海报 from == 0 首页跳转（navigateTo） from == 1 模板消息转发（reLaunch）
			/* if (!litePath2) { // 如果副路由页面未配置则跳转具体的活动页面
				$infoBox.toast('小程序页面副路由未配置', { duration: 2000 })
				if (from == '1') {
					setTimeout(() => {
						uni.switchTab({
							url: '/pages/index/index'
						})
					}, 2000)
				}
				return
			}
			if (!activityImg2) {
				$infoBox.toast('活动副页面主图未配置', { duration: 2000 })
				if (from == '1') {
					setTimeout(() => {
						uni.switchTab({
							url: '/pages/index/index'
						})
					}, 2000)
				}
				return
			} */
			if (from == '0') {
				callback({ url: litePath2 + params + `&activityDetail=${encodeURIComponent(JSON.stringify(bizData))}`, errorMsg: '' }, 'navigateTo', routerData)
			} else if (from == '1') {
				callback({ url: litePath2 + params + `&activityDetail=${encodeURIComponent(JSON.stringify(bizData))}`, errorMsg: '' }, 'reLaunch', routerData)
			}
			return
		}
		if (!litePath) {
			$infoBox.toast('活动未配置小程序页面')
			callback({ url: undefined, errorMsg: '活动未配置小程序页面' }, method, routerData)
			return
		}
		const url = litePath + params + `&periodType=${periodType}`
		// officialAuthUrl公众号授权地址，如果用户授权过当前活动的公众号，则不会返回该字段
		// authConfig同主体发券授权地址，如果用户授权过当前活动的支付通道，则不会返回该字段
		if(officialAuthUrl && officialAuthUrl !== appConfig.payUrl){
			try {
				getApp().globalData.temp_official_appid = officialAppId
				getApp().globalData.temp_path = `${url}&activityDetail=${encodeURIComponent(JSON.stringify(bizData))}`
				appConfig.url = officialAuthUrl
				// 同时判断是否是三方出资 且未授权
				if (authConfig && payAuthId && isCommSubject === 0){
					// 全局临时变量（支付通道以及支付授权地址） 在公众号授权后 去同主体授权
					getApp().globalData.temp_pay_auth_url = authConfig
					getApp().globalData.temp_ifcode = ifCode
				}
				uni.navigateTo({
					url: '/pages/openid/openid',
					success() {
						if (routerData.success) {
							routerData.success()
						}
					}
				})
				callback({ url: undefined, errorMsg: '请先登录' }, method, routerData)
			} catch (e) {
				$infoBox.toast('公众号配置有误')
				callback({ url: undefined, errorMsg: '公众号配置有误' }, method, routerData)
			}
			return
		}
		if (authConfig && payAuthId && isCommSubject === 0) {
			try {
				// 存储临时变量 temp_ifcode temp_path
				getApp().globalData.temp_ifcode = ifCode
				getApp().globalData.temp_path = `${url}&activityDetail=${encodeURIComponent(JSON.stringify(bizData))}`
				appConfig.url = authConfig
				uni.navigateTo({
					url: '/pages/openid/openid',
					success() {
						if (routerData.success) {
							routerData.success()
						}
					}
				})
				callback({ url: undefined, errorMsg: '请先登录' }, method, routerData)
			} catch (e) {
				$infoBox.toast('出资方配置有误')
				callback({ url: undefined, errorMsg: '出资方配置有误' }, method, routerData)
			}
		} else {
			callback({ url: `${url}&activityDetail=${encodeURIComponent(JSON.stringify(bizData))}`, errorMsg: '' }, method, routerData)
		}
	})
}

/**
 * 根据结果拦截路由
 */
function callback(result, method, routerData) {
	if (result && result.url) {
		uni[method]({
			url: result.url,
			success() {
				if (routerData.success) {
					routerData.success()
				}

			},
			fail() {
				if (routerData.fail) {
					routerData.fail(result.errorMsg)
				}
			},
			complete() {
				if (routerData.complete) {
					routerData.complete()
				}
			}
		})
	} else {
		if (routerData.fail && result && result.errorMsg) {
			routerData.fail(result.errorMsg)
		}
	}
}

export function reLaunch(routerData) {
	if (!routerData) return
	invoke(routerData, 'reLaunch')
}

export function navigateTo(routerData) {
	if (!routerData) return
	invoke(routerData, 'navigateTo')
}